﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Logica.Clases;

namespace vudu.PaginasWeb.G2Horario
{
    public partial class addMateriasPreMatricula : System.Web.UI.Page
    {
        #region Atributos

            private List<Materia> _misMateriasCandidatas;
            private List<Materia> _misMateriasObligatorias;
            private List<Materia> _misMateriasSeleccionadas;
            private Estudiante _estudianteActual;
            private int _maxCreditos;
            private int _counterCredits;

        #endregion FinAtributos

        #region Metodos

            protected void InitSecure()
            {
                string miRol = (string)Session["rol"];
                if (miRol != "Estudiante")
                    Response.Redirect("../G3AccesoSistema/InicioSistema.aspx");

                //Session["rol"] = "";
                _estudianteActual = new Estudiante();
                _estudianteActual = (Estudiante)Session["usuario"];

                if (_estudianteActual.ExistPreMatriculaActiva())
                {
                    Response.Write("<script language=\"javascript\">alert('Ya usted no puede registrar mas PreMatriculas')</script>" +
                                    "<script language=\"javascript\">window.location='indexPreMatricula.aspx'</script>");
                }
                if (_estudianteActual.SecuenceCounter != 1)
                    Response.Redirect("indexPreMatricula.aspx");
            }

            protected void InitComponents()
            {
                _misMateriasSeleccionadas = new List<Materia>();
                _misMateriasCandidatas = new List<Materia>();
                _misMateriasObligatorias = new List<Materia>();
                _misMateriasCandidatas = _estudianteActual.GenerarMateriasPreCandidatas();
                _misMateriasObligatorias = _estudianteActual.GenerarMateriasObligatorias(_misMateriasCandidatas);
                labelEstudiante.Text = _estudianteActual.Nombre + "&nbsp;" + _estudianteActual.Apellido;
                labelMigaActual.CssClass = "migaActual";
                _maxCreditos = _estudianteActual.MaxCreditos();
                labelOperationStatus.Text = "Numero máximo de créditos permitidos: " + _maxCreditos.ToString();
                _counterCredits = 0;
            }

            protected bool CheckObligatorias(List<Materia> misMateriasObligatorias, int idMateria)
            {
                foreach (Materia miMateriaObligatoria in misMateriasObligatorias)
                {
                    if (idMateria.Equals(miMateriaObligatoria.Codigo))
                    {
                        return true;
                    }
                }
                return false;
            }

            protected bool CheckSeleccionadas(List<SeccionMateria> misSeccionesMateria, int idMateria)
            {
                foreach (SeccionMateria miSeccionMateria in misSeccionesMateria)
                {
                    if (idMateria.Equals(miSeccionMateria.Materia.Codigo))
                    {
                        return true;
                    }
                }
                return false;
            }

            protected void ListLoad(List<Materia> misMateriasCandidatas)
            {
                bool existOnList;
                foreach (Materia miMateria in misMateriasCandidatas)
                {
                    ListItem listItem = new ListItem();
                    existOnList = CheckObligatorias(_misMateriasObligatorias, miMateria.Codigo);
                    if (existOnList)
                    {
                        listItem.Selected = true;
                        listItem.Enabled = false;
                    }
                    if (_estudianteActual.PreMatriculaModificable.Codigo != 0)
                    {
                        existOnList = CheckSeleccionadas(_estudianteActual.PreMatriculaModificable.ListaSecciones, miMateria.Codigo);
                        if (existOnList)
                        {
                            listItem.Selected = true;
                        }
                    }
                    //listItem.Value = miMateria.Nombre;
                    listItem.Value = miMateria.Codigo.ToString();
                    listItem.Text = "&nbsp;&nbsp;[U.C:&nbsp;" + 
                                    _estudianteActual.CreditoMateria(miMateria.Codigo).ToString() + "]" + 
                                    "&nbsp;&nbsp;" + miMateria.Nombre;
                    checkListCandidatas.Items.Add(listItem); 
                }
            }

            protected void Page_Load(object sender, EventArgs e)
            {
                InitSecure();
                InitComponents();
                if ((_estudianteActual.PreMatriculaModificable.Codigo != 0) &&
                    (_estudianteActual.PageCounter == 1))
                {
                    labelMigaActual.Text = "Modificar PreMatricula";
                    btnBackMateriasSelected.Text = "Cancelar";
                    btnBackMateriasSelected.Enabled = true;
                }
                else
                {
                    _estudianteActual.PreMatriculaModificable = new HorarioPreMatricula();
                    _estudianteActual.PageCounter = 0;
                    labelMigaActual.Text = "Agregar PreMatricula";
                    btnNextMateriasSelected.Enabled = true;
                }
                labelTitulo.Text = labelMigaActual.Text + "<br /><br /><br /><br />";
                ListLoad(_misMateriasCandidatas);
            }

            protected void btnNextMateriasSelected_Click(object sender, EventArgs e)
            {            
                for (int index = 0; (index < (checkListCandidatas.Items.Count)/2) ; index++)
                {
                    foreach (Materia miMateria in _misMateriasCandidatas)
                    {
                        if ((miMateria.Codigo == Int32.Parse(checkListCandidatas.Items[index].Value)) 
                                && (checkListCandidatas.Items[index].Selected))
                        {
                            _counterCredits = _counterCredits + _estudianteActual.CreditoMateria(miMateria.Codigo);
                            _misMateriasSeleccionadas.Add(miMateria);
                        }
                    }
                }
                if ((_misMateriasSeleccionadas.Count()> 0) && (_counterCredits <= _maxCreditos))
                {
                    _estudianteActual.PageCounter++;
                    _estudianteActual.SecuenceCounter = 2;
                    Session["rol"] = "Estudiante";
                    _estudianteActual.MisMateriasSeleccionadasPreMatricula = _misMateriasSeleccionadas;
                    Response.Redirect("selectHorariosPreMatricula.aspx");
                }
                else if (_counterCredits > _maxCreditos)
                {
                    Response.Write("<script language=\"javascript\">alert('El maximo de creditos fue excedido')</script>" +
                                    "<script language=\"javascript\">window.location='addMateriasPreMatricula.aspx'</script>");
                }
                else if (_misMateriasSeleccionadas.Count() == 0)
                {
                    Response.Write("<script language=\"javascript\">alert('Debe seleccionar al menos una materia')</script>" +
                                    "<script language=\"javascript\">window.location='addMateriasPreMatricula.aspx'</script>");
                }

            }

            protected void btnBackMateriasSelected_Click(object sender, EventArgs e)
            {
                Session["rol"] = "Estudiante";
                _estudianteActual.PageCounter--;
                _estudianteActual.SecuenceCounter = 0;
                if ((_estudianteActual.PreMatriculaModificable.Codigo != 0) &&
                    (_estudianteActual.PageCounter == 1))
                {
                    Response.Redirect("indexPreMatricula.aspx");
                }
                else
                {
                    Response.Redirect("indexAgregarPreMatricula.aspx");
                }
            }

        #endregion FinMetodos
    }
}